/*
 * Funambol is a mobile platform developed by Funambol, Inc. 
 * Copyright (C) 2003 - 2007 Funambol, Inc.
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License version 3 as published by
 * the Free Software Foundation with the addition of the following permission 
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 
 * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU Affero General Public License 
 * along with this program; if not, see http://www.gnu.org/licenses or write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301 USA.
 * 
 * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite 
 * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
 * 
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 * 
 * In accordance with Section 7(b) of the GNU Affero General Public License
 * version 3, these Appropriate Legal Notices must retain the display of the
 * "Powered by Funambol" logo. If the display of the logo is not reasonably 
 * feasible for technical reasons, the Appropriate Legal Notices must display
 * the words "Powered by Funambol".
 */
#include "NoteDataConverter.h"
#include "base/Log.h"
#include "base/util/StringBuffer.h"

#define NOTESIF "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<note>\r\n<SIFVersion>1.1</SIFVersion>\r\n<Body>%s</Body>\r\n\
<Subject>%s</Subject>\r\n</note>"

PIMItem* NoteDataConverter::parse(const char* vmessage){

    StringBuffer val ( vmessage);
    StringBuffer body;
    StringBuffer title;
    StringBuffer decodedval;

    if(val.find("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") != StringBuffer::npos){//SIF Version
        LOG.debug("NoteDataConverter: SIF Conversion");
        int tlen = val.find("</Subject>") - (val.find("<Subject>") +9 );
        title = val.substr((val.find("<Subject>") +9 ), tlen);
        int len = val.find("</Body>") - (val.find("<Body>") +6);
        body = val.substr((val.find("<Body>") +6), len);
        body.replaceAll("\r\n","\n");
        body.replaceAll("\n","\r\n");
        StringBuffer removetitle = title;
        removetitle.append("\r\n");
        body.replace(removetitle.c_str(), "");
    }else{//text plain version
        LOG.debug("NoteDataConverter: Plain Text Conversion");
        val.replaceAll("\r\n","\n");
        val.replaceAll("\n","\r\n");
        int len = val.find("\r\n");
        int nlen = len + 2;
        title = val.substr(0, len);
        body = val.substr(nlen, val.length());
    }
    LOG.debug("NoteDataConverter: SIF Conversion title: %s", title.c_str());
    LOG.debug("NoteDataConverter: SIF Conversion body: %s", body.c_str());
    Note* n = new Note();
    n->setTitle(title);
    n->setBody(body);
    return (PIMItem*)n;
}

const char* NoteDataConverter::format(PIMItem& item){
    //text plain version
    //note = ((Note&)item).getTitle();
    //note.append("\r\n");
    //note.append(((Note&)item).getBody());
    
    StringBuffer val;
    val.sprintf("%s\r\n%s",((Note&)item).getTitle(),((Note&)item).getBody());
    
    
    note.sprintf(NOTESIF,val.c_str(), ((Note&)item).getTitle());
    
    return note;
}

